Funkce HttpSendRequest a predavani POSTovanych dat

Otázka od: Martin Falta

21. 10. 2002 22:05

Ahoj,

potreboval bych nejakou ukazku kodu s pouzitim %subj%. Jde mi o to, ze
delam aplikaci, ktera musi komunikovat s webem a musim tam pouzit
session. Nenasel jsem komponenty, ktery by umely to, co potrebuju, tak
jsem se rozhodl, ze si to napisu sam s pouzitim WinInet. Ale jaksi
jsem se zasekl na pouziti dane fce  
Takze, pokud by nekdo z vas byl tak hodny a poslal mi kousek kodu, kde
bych se mohl podivat, jak na to, budu mu velmi vdecny.

Predem diky.

--
Best regards,
 Martin mailto:martin@aprog.cz

Odpovedá: Milan Cizek

23. 10. 2002 21:30

> potreboval bych nejakou ukazku kodu s pouzitim %subj%. Jde mi o to, ze
> delam aplikaci, ktera musi komunikovat s webem a musim tam pouzit
> session. Nenasel jsem komponenty, ktery by umely to, co potrebuju, tak
> jsem se rozhodl, ze si to napisu sam s pouzitim WinInet. Ale jaksi
> jsem se zasekl na pouziti dane fce  
> Takze, pokud by nekdo z vas byl tak hodny a poslal mi kousek kodu, kde
> bych se mohl podivat, jak na to, budu mu velmi vdecny.

function TWebUpdate.PostUpdateInfo: string;
var Hint,Hconn,Hreq: HInternet; Header: string; Accept: array[0..28] of
Char;
    Buffer: array[0..ReadBufferSize-1] of Char; BufSize: DWORD; Counter:
integer;
begin
  with UpdFile.PostUpdateInfo do
  begin
    if (URL='') or (Action='') or (Data='') then Exit;
    Header:='Content-Type: application/x-www-form-urlencoded';
    StrPCopy(Accept,'text/*');

    if Proxy='' then
      Hint:=InternetOpen('WebUpdate',INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0)
      {or INTERNET_FLAG_ASYNC }
    else

Hint:=InternetOpen('WebUpdate',INTERNET_OPEN_TYPE_PROXY,PChar(Proxy),nil,0);
      {or INTERNET_FLAG_ASYNC }


Hconn:=InternetConnect(Hint,PChar(URL),INTERNET_DEFAULT_HTTP_PORT,nil,nil,IN
TERNET_SERVICE_HTTP,0,1);

    if Hconn<>nil then
      begin
        Hreq:=HttpOpenRequest(Hconn,'POST',PChar(Action),nil,nil,nil,0,1);
        if Hreq<>nil then
          begin
            Result:='';
            if
HttpSendRequest(Hreq,PChar(Header),Length(Header),PChar(Data),Length(Data))
then
              begin
                BufSize:=ReadBufferSize;
                while (BufSize=ReadBufferSize) do
                  begin
                    if not
InternetReadFile(Hreq,@Buffer,ReadBufferSize,BufSize) then Break;
                    if (BufSize>0) and (BufSize<=ReadBufferSize) then
                      for Counter:=0 to BufSize-1 do
Result:=Result+Buffer[Counter];
                  end;
              end;
            InternetCloseHandle(Hreq);
          end else ToLog('Cannot access resource for post');
        InternetCloseHandle(Hconn);
      end else ToLog('Cannot connect to server for post');
  end;
  InternetCloseHandle(Hint);
end;

S pozdravem Milan Cizek, amatersky programator, D6.02 Ent
Win2k (SP3) a WinXP, cizek.milan@seznam.cz, ICQ: 59826637